﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAO;
using DuLieu;
using Net.SourceForge.Vietpad.InputMethod;
using Microsoft.Win32;

namespace QLQTPM_Nhom03
{
    public partial class ChuongTrinh : Form
    {

        //System.Timers.Timer timer = new System.Timers.Timer(500);
        //private int timeStopTimer = 0;


        private Boolean FirstInitialize = false;

        public ChuongTrinh()
        {
            InitializeComponent();

            //timer.AutoReset = false;
            //timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
        }

        private void ChuongTrinh_Load(object sender, EventArgs e)
        {
            // Hiện chuột phải...
            this.ContextMenuStrip = contextMenuStrip1;

            // Ẩn chức năng tìm kiếm nâng cao...
            check_TimKiemNangCao.Checked = false;
            gbx_TimKiemNangCao.Visible = false;
            gbx_KetQua.Location = new Point(12, 200);
            gbx_KetQua.Size = new Size(990, 476);
            dgv_DanhSachDiaDiem.Size = new Size(977, 418);
            panelThongTinSoLuong.Location = new Point(6, 362 + 79);
            pbx_KetQua.Location = new Point(12, 130);

            //khởi tạo combobox Đường
            List<DuongDTO> arrDuong = DuongDAO.GetDanhSachDuong();
            arrDuong.Sort();
            DuongDTO allD = new DuongDTO();
            allD.TenDuong = "Chọn tất cả";
            allD.MaDuong = -1;
            arrDuong.Insert(0, allD);
            cbx_Duong.DataSource = arrDuong;
            cbx_Duong.DisplayMember = "TenDuong";
            cbx_Duong.ValueMember = "MaDuong";

            //khởi tạo combobox Dịch Vụ
            List<DichVuDTO> arrDV = DichVuDAO.GetListDichVu();
            arrDV.Sort();
            DichVuDTO allDV = new DichVuDTO();
            allDV.TenDichVu = "Chọn tất cả";
            allDV.MaDichVu = -1;
            arrDV.Insert(0, allDV);
            cbx_LoaiDichVu.DataSource = arrDV;
            cbx_LoaiDichVu.DisplayMember = "TenDichVu";
            cbx_LoaiDichVu.ValueMember = "MaDichVu";

            //khởi tạo combobox Quận
            List<QuanDTO> arrQ = QuanDAO.GetDanhSachQuan();
            arrQ.Sort();
            QuanDTO allQ = new QuanDTO();
            allQ.TenQuan = "Chọn tất cả";
            allQ.MaQuan = -1;
            arrQ.Insert(0, allQ);
            cbx_Quan.DataSource = arrQ;
            cbx_Quan.DisplayMember = "TenQuan";
            cbx_Quan.ValueMember = "MaQuan";

            //khởi tạo combobox Phường
            List<PhuongDTO> arrP = PhuongDAO.GetListPhuong();
            arrP.Sort();
            PhuongDTO allP = new PhuongDTO();
            allP.TenPhuong = "Chọn tất cả";
            allP.MaPhuong = -1;
            arrP.Insert(0, allP);
            cbx_Phuong.DataSource = arrP;
            cbx_Phuong.DisplayMember = "TenPhuong";
            cbx_Phuong.ValueMember = "MaPhuong";

            //khởi tạo combobox Thành Phố
            cbx_ThanhPho.DataSource = new List<String>(new String[] { "TP Hồ Chí Minh" });
            LoadAutoCompleteSource();
            
            //Khởi tạo textbox tên dịch vụ
            VietKeyHandler keyHandler = new VietKeyHandler(txtTenDichVu);
            txtTenDichVu.KeyPress += new KeyPressEventHandler(keyHandler.OnKeyPress);
            VietKeyHandler.InputMethod = InputMethods.Telex;
            VietKeyHandler.VietModeEnabled = true;
            VietKeyHandler.SmartMark = true;
            TimKiem();
            ResetTextBox();
            FirstInitialize = true;
        }

        private void LoadAutoCompleteSource()
        {
            List<DuLieuTextDTO> result = LayDuLieu();
            txtTenDichVu.AutoCompleteMode = AutoCompleteMode.Suggest;
            txtTenDichVu.AutoCompleteSource = AutoCompleteSource.CustomSource;

            AutoCompleteStringCollection collection = new AutoCompleteStringCollection();
            List<string> arr = new List<string>();
            for (int i = 0; i < result.Count ; i++ )
            {
                arr.Add(result[i].TenDiaDiem);
            }
            collection.AddRange(arr.ToArray());
            txtTenDichVu.AutoCompleteCustomSource = collection;
        }


        private List<DuLieuTextDTO> LayDuLieu()
        {
            string TenDichVu = txtTenDichVu.Text.Trim();
            int LoaiDichVu = (int)cbx_LoaiDichVu.SelectedValue;
            int MaPhuong = (int)cbx_Phuong.SelectedValue;
            int MaDuong = (int)cbx_Duong.SelectedValue;
            int MaQuan = (int)cbx_Quan.SelectedValue;

            List<DuLieuTextDTO> result = new List<DuLieuTextDTO>();
            result = DuLieuTextDAO.TimDuLieuTongHop(TenDichVu, LoaiDichVu, MaDuong, MaPhuong, MaQuan);
            return result;
        }

        private void btn_TimKiem_Click(object sender, EventArgs e)
        {
            ResetTextBox();
            //TimKiem();
            //Panel panel = new Panel();
            //panel.Location = new Point(6,22 + 40 + 5);
            //panel.BackColor = Color.Red;
            //panel.Parent = this.panel1;
            //panel.Visible = true;
        }

        private void check_TimKiemNangCao_CheckedChanged(object sender, EventArgs e)
        {
            if (check_TimKiemNangCao.Checked == false)
            {
                gbx_TimKiemNangCao.Visible = false;
                gbx_KetQua.Location = new Point(12, 200);
                gbx_KetQua.Size = new Size(990, 476);
                dgv_DanhSachDiaDiem.Size = new Size(977, 418);
                panelThongTinSoLuong.Location = new Point(6, 362 + 79);
                pbx_KetQua.Location = new Point(12, 130);
                //btn_TimKiem.Image = Properties.Resources.TimKiem;
            }
            else
            {
                gbx_TimKiemNangCao.Visible = true;
                gbx_KetQua.Location = new Point(12, 279);
                gbx_KetQua.Size = new Size(990, 397);
                dgv_DanhSachDiaDiem.Size = new Size(977, 339);
                panelThongTinSoLuong.Location = new Point(6, 362);
                pbx_KetQua.Location = new Point(12, 203);
                //btn_TimKiem.Image = Properties.Resources.TimKiemNangCao;
                //cbx_ThanhPho.Text 
            }
        }

        private void thoátToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void tìmKiếmThôngThườngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            check_TimKiemNangCao.Checked = false;
            check_TimKiemNangCao_CheckedChanged(sender, e);
        }

        private void tìmKiếmNângCaoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            check_TimKiemNangCao.Checked = true;
            check_TimKiemNangCao_CheckedChanged(sender, e);
        }

        private void telexToolStripMenuItem_Click(object sender, EventArgs e)
        {
            VietKeyHandler.InputMethod = InputMethods.Telex;
        }

        private void vniToolStripMenuItem_Click(object sender, EventArgs e)
        {
            VietKeyHandler.InputMethod = InputMethods.VNI;
        }

        private void khôngDùngBộGõToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //chưa xử lý
        }

        private void TimKiem()
        {
            string TenDichVu = txtTenDichVu.Text.Trim();
            int LoaiDichVu = (int)cbx_LoaiDichVu.SelectedValue;
            int MaPhuong = (int)cbx_Phuong.SelectedValue;
            int MaDuong = (int)cbx_Duong.SelectedValue;
            int MaQuan = (int)cbx_Quan.SelectedValue;
            dgv_DanhSachDiaDiem.DataSource = null;

            List<DuLieuTextDTO> result = new List<DuLieuTextDTO>();
            result = DuLieuTextDAO.TimDuLieuTongHop(TenDichVu, LoaiDichVu, MaDuong, MaPhuong, MaQuan);
            labelSoLuong.Text = "Tổng Cộng: " + result.Count.ToString();
            if (result.Count != 0)
            {
                dgv_DanhSachDiaDiem.Visible = true;
                dgv_DanhSachDiaDiem.DataSource = result;
                dgv_DanhSachDiaDiem.Columns[0].HeaderText = "Tên Dịch Vụ";
                dgv_DanhSachDiaDiem.Columns[1].HeaderText = "Tên Địa Điểm";
                dgv_DanhSachDiaDiem.Columns[2].HeaderText = "Địa chỉ";
                dgv_DanhSachDiaDiem.Columns[3].HeaderText = "Chú Thích";
                dgv_DanhSachDiaDiem.Columns[0].Width = 150;
                dgv_DanhSachDiaDiem.Columns[1].Width = 230;
                dgv_DanhSachDiaDiem.Columns[2].Width = 280;
                dgv_DanhSachDiaDiem.Columns[3].Width = 150;
            }

            else if (result == null)
                {
                MessageBox.Show("Có lỗi trong quá trình tìm kiếm. Bạn hãy thử lại hoặc liên lạc với nhóm phát triển để tìm cách giải quyết!");
                }

            else
                {

                    dgv_DanhSachDiaDiem.Visible = false;
                    
                    Label label = new Label();
                    label.Text =    "Không tìm thấy kết quả bạn cần! " +
                                    "\nCác nguyên nhân có thể: "+
                                    "\n     Do thực tế không có các dịch vụ ấy"+
                                    "\n     Do cơ sở dữ liệu chưa được cập nhật"+
                                    "\n     Do chương trình còn lỗi trong quá trình tìm kiếm..." +
                                    "\n\nVui lòng liên lạc với nhóm phát triển để biết thêm thông tin!";
                    label.Parent = gbx_KetQua;
                    label.Visible = true;
                    label.Location = new Point(10,50);
                    label.Size = new Size(977,300);
                    label.Font = new System.Drawing.Font(FontFamily.GenericMonospace, 20);
                    label.TextAlign = ContentAlignment.MiddleCenter;
                    
                    
                                    //"KHÔNG TÌM THẤY KẾT QUẢ";
                    //MessageBox.Show("Không tìm thấy kết quả bạn cần! \nCác nguyên nhân có thể: do thực tế không có các dịch vụ ấy, do cơ sở dữ liệu chưa được cập nhật, do chương trình còn lỗi trong quá trình tìm kiếm...\n\nVui lòng liên lạc với nhóm phát triển để biết thêm thông tin!",
                    //    "KHÔNG TÌM THẤY KẾT QUẢ", MessageBoxButtons.OK, MessageBoxIcon.Warning);

                }
        }

        private void iconitsHelp_Click(object sender, EventArgs e)
        {
            HelpForm hf = new HelpForm();
            hf.Show(this);
            this.Enabled = false;
        }

        private void ChuongTrinh_Shown(object sender, EventArgs e)
        {
            //khởi tạo biến registry cho việc startup form help
            RegistryKey regMySoft = RegistryUtil.Create();
            if (regMySoft != null)
            {
                using (RegistryKey tempKey = regMySoft.OpenSubKey("HelpStartup"))
                {
                    if (tempKey.GetValue("Startup").ToString() == "1")
                    {
                        HelpForm hf = new HelpForm();
                        hf.Show(this);
                        this.Enabled = false;
                        hf.Focus();
                    }
                }
            }
        }

        private void ResetTextBox()
        {
            txtTenDichVu.Text = "";
            txtTenDichVu.Focus();
            cbx_LoaiDichVu.SelectedIndex = 0;
            cbx_Duong.SelectedIndex = 0;
            cbx_Phuong.SelectedIndex = 0;
            cbx_Quan.SelectedIndex = 0;
            cbx_ThanhPho.SelectedIndex = 0;
        }

        private void txtTenDichVu_TextChanged(object sender, EventArgs e)
        {
            //timeStopTimer = 0;            
            timer1.Stop();
            timer1.Start(); 
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //timeStopTimer++;
            //if (timeStopTimer == 4)
            timer1.Stop();   
            TimKiem();
        }

        private void cbx_LoaiDichVu_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (FirstInitialize)
            TimKiem();
        }

        private void cbx_Duong_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (FirstInitialize)
            TimKiem();
        }

        private void cbx_Phuong_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (FirstInitialize)
            TimKiem();
        }

        private void cbx_ThanhPho_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (FirstInitialize)
            TimKiem();
        }

        private void cbx_Quan_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(FirstInitialize)
            TimKiem();
        }


        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            List<string> goiy = SearchEngineer.Search.GoiYTenDiaDiem(textBox1.Text);
            textBox1.AutoCompleteCustomSource.Clear();
            textBox1.AutoCompleteCustomSource.AddRange(goiy.ToArray());
            txtTenDichVu.Text = textBox1.Text;
        }

        private void txtTenDichVu_DoubleClick(object sender, EventArgs e)
        {
            txtTenDichVu.Text = "";
            txtTenDichVu.Focus();
            cbx_LoaiDichVu.SelectedIndex = 0;
            cbx_Duong.SelectedIndex = 0;
            cbx_Phuong.SelectedIndex = 0;
            cbx_Quan.SelectedIndex = 0;
            cbx_ThanhPho.SelectedIndex = 0;
        }

        private void xóaÔTênĐịaĐiểmToolStripMenuItem_Click(object sender, EventArgs e)
        {
            txtTenDichVu.Text = "";
            txtTenDichVu.Focus();
            cbx_LoaiDichVu.SelectedIndex = 0;
            cbx_Duong.SelectedIndex = 0;
            cbx_Phuong.SelectedIndex = 0;
            cbx_Quan.SelectedIndex = 0;
            cbx_ThanhPho.SelectedIndex = 0;
        }

        private void tìmKiếmThôngThườngToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            check_TimKiemNangCao.Checked = false;
            check_TimKiemNangCao_CheckedChanged(sender, e);
        }

        private void tìmKiToolStripMenuItem_Click(object sender, EventArgs e)
        {

            check_TimKiemNangCao.Checked = true;
            check_TimKiemNangCao_CheckedChanged(sender, e);
        }
    }
}
